3
תגובות
כתבתי שעה ובטעות לחצתי "הוסף מדריך" :\ אז נתחיל מההתחלה...
אז ככה כתבתי פונקציה לבדיקה אם הדומיין קיים,עכשיו היא עושה קצת בעיות.
לדוגמא: לדומיין facebook.com היא מחזירה אמת אבל לדומיין www.facebook.com היא מחזירה שקר (חכה שניה, לא בגלל הסאב).
זאת הפונקציה:
זה הטסט:
למישהו יש רעיון למה זה קורה ואיך אפשר לסדר את זה? תודה.
אז ככה כתבתי פונקציה לבדיקה אם הדומיין קיים,עכשיו היא עושה קצת בעיות.
לדוגמא: לדומיין facebook.com היא מחזירה אמת אבל לדומיין www.facebook.com היא מחזירה שקר (חכה שניה, לא בגלל הסאב).
זאת הפונקציה:
function is_domain($domain){
if(preg_match('@^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$@i', $domain)){
$mxhosts = array();
if(!function_exists('getmxrr') XOR getmxrr($domain, $mxhosts)){
return true;
}
}
return false;
}
if(preg_match('@^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$@i', $domain)){
$mxhosts = array();
if(!function_exists('getmxrr') XOR getmxrr($domain, $mxhosts)){
return true;
}
}
return false;
}
זה הטסט:
$domains = array(
'localhost', //false
'www.phpguide.co.il', //true
'sub.phpguide.co.il', //false
'phpguide.co.il', //true
'google.co', //false
'google.com', //true
'google.co.il', //true
'google.foo', //false
'mail.google.com', //true
'my.google.com', //false
'facebook.com', //true
'www.facebook.com' //false
);
foreach($domains as $domain){
echo "Domain: {$domain}, Matche: " . (is_domain($domain) ? 'TRUE' : 'FALSE') . '<br>';
}
'localhost', //false
'www.phpguide.co.il', //true
'sub.phpguide.co.il', //false
'phpguide.co.il', //true
'google.co', //false
'google.com', //true
'google.co.il', //true
'google.foo', //false
'mail.google.com', //true
'my.google.com', //false
'facebook.com', //true
'www.facebook.com' //false
);
foreach($domains as $domain){
echo "Domain: {$domain}, Matche: " . (is_domain($domain) ? 'TRUE' : 'FALSE') . '<br>';
}
למישהו יש רעיון למה זה קורה ואיך אפשר לסדר את זה? תודה.
3 תשובות
ענה
משתמש_110602
ב
18 לפברואר 2012
#
מדוע אתה משתמש ב- getmxrr? מן הסתם לחלק מהדומיינים אין MX record, אבל יש DNS record אחר - A או CNAME. לדוגמה אתה אני מריץ:
$ host -t mx www.facebook.com
www.facebook.com has no MX record
www.facebook.com has no MX record
לעומת זאת אם אתה מריץ:
host www.facebook.com
www.facebook.com has address 69.63.189.16
www.facebook.com has address 69.63.189.16
אתה צריך להשתמש ב- checkdnsrr
בנוסף לזה
א. לא אמור להיות פה XOR וPHP בכל זאת תנסה להפעיל את getmxarr גם אם היא לא קיימת
ב. כתבתי שעה ובטעות לחצתי "הוסף מדריך" :\ אז נתחיל מההתחלה... יטופל השבוע
ג. אתה תרוויח יותר אם תשתמש בפילטר ו parse_url כדי לנתח את הכתובת.
ענה
משתמש_112292
ב
19 לפברואר 2012
#
תודה רבה! עובד, השתמשתי בgetmxrr בגלל מדריך שראיתי פה לאימות אמייל.
$hosts = array(
'http://localhost', //ture
'http://www.phpguide.co.il', //true
'http://sub.phpguide.co.il', //false
'http://phpguide.co.il', //true
'http://google.co', //ture
'http://google.com', //true
'http://google.co.il', //true
'http://google.foo', //false
'http://mail.google.com', //true
'http://my.google.com', //false
'http://facebook.com', //true
'http://www.facebook.com' //ture
);
foreach($hosts as $host){
echo "{$host} //" . (get_host($host) ? 'ture' : 'false') . "<br>\n";
}
function get_host($url){
if(($parse_url = parse_url($url)) && isset($parse_url['scheme'], $parse_url['host']) && (!function_exists('checkdnsrr') || checkdnsrr($parse_url['host'], 'ANY'))){
return "{$parse_url['scheme']}://{$parse_url['host']}/";
}
return false;
}
'http://localhost', //ture
'http://www.phpguide.co.il', //true
'http://sub.phpguide.co.il', //false
'http://phpguide.co.il', //true
'http://google.co', //ture
'http://google.com', //true
'http://google.co.il', //true
'http://google.foo', //false
'http://mail.google.com', //true
'http://my.google.com', //false
'http://facebook.com', //true
'http://www.facebook.com' //ture
);
foreach($hosts as $host){
echo "{$host} //" . (get_host($host) ? 'ture' : 'false') . "<br>\n";
}
function get_host($url){
if(($parse_url = parse_url($url)) && isset($parse_url['scheme'], $parse_url['host']) && (!function_exists('checkdnsrr') || checkdnsrr($parse_url['host'], 'ANY'))){
return "{$parse_url['scheme']}://{$parse_url['host']}/";
}
return false;
}